package com.hhj.sharding.sphere.demo.enums;

import lombok.Getter;

/**
 * 通用 错误状态码枚举
 * <p>
 * 错误码和错误信息定义类
 * 1. 错误码定义规则为6位数字
 * 2. 前三位表示业务场景，最后三位表示错误码。例如：500001。500:通用 001:系统未知异常
 * 3. 维护错误码后需要维护错误描述，将他们定义为枚举形式
 * 4. 各服务分配状态码如下:
 * a.业务服务:501xxx
 * b.会员服务:503xxx
 * c.订单服务:505xxx
 * d.支付服务:506xxx
 * e.附件服务:507xxx
 * <p>
 *
 * @Description
 * @Author HHJ
 * @Date 2022-02-28 18:28
 */
@Getter
public enum BusinessEnums implements BusinessEnum {

    /**
     * 请求成功
     */
    SUCCESS(200, "OK"),
    /**
     * 参数有误
     */
    VALIDATION_ERROR(400, "参数有误"),
    /**
     * 令牌不合法
     */
    UNAUTHORIZED(401, "令牌不合法"),
    /**
     * 无法访问
     */
    PAYMENT_REQUIRED(402, "无法访问"),
    /**
     * 权限不足
     */
    FORBIDDEN(403, "权限不足"),
    /**
     * 资源未找到
     */
    NOT_FOUND(404, "资源未找到"),
    /**
     * 请求失败!
     */
    ERROR(500, "请求失败"),
    /**
     * 请求无法识别
     */
    WARN(501, "请求无法识别"),
    /**
     * 服务不可用
     */
    UNAVAILABLE(503, "服务不可用"),

    RUNTIME_EXCEPTION_ERROR(500000, "系统繁忙，请稍后访问!"),
    REMOTE_EXCEPTION_ERROR(500001, "远程请求中，请稍后访问"),
    TOKEN_IS_NOT_NULL(500002, "令牌不能为空"),
    TOKEN_IS_AUTH_FAIL(500003, "令牌错误!"),
    TOKEN_IS_INVALID(500004, "令牌已失效!"),
    NOT_LOGIN_ERROR(500005, "用户未登录"),
    SIGN_IS_ERROR(500006, "签名不能为空"),
    SIGN_IS_EXCEPTION(500007, "签名错误"),
    AUTH_IS_ERROR(500008, "权限中心请求失败"),
    AUTH_REFUSE_ERROR(500009, "访问拒绝"),
    METHOD_NOT_SUPPORTED(500010, "请求方法不支持"),
    MEDIA_TYPE_NOT_SUPPORT(500011, "媒体类型不支持"),
    IDEMPOTENT_ERROR(500012, "请勿重复操作!"),
    ENUM_IS_NULL(500013, "枚举不存在"),
    VERSION_ERROR(500014, "乐观锁已变化,请刷新数据!"),
    RECORD_IS_NOT_EXIST(500015, "记录不存在或已下架!"),
    RECORD_DOWN_EXIST(500016, "记录已下架!"),

    RECORD_NOT_EXISTS(500020, "记录不存在"),
    RECORD_ADD_FAILURE(500021, "记录新增失败"),
    RECORD_UPDATE_FAILURE(500022, "记录更新失败"),
    RECORD_DELETE_FAILURE(500023, "记录删除失败"),
    DATA_UNUSUAL_ERROR(500024, "数据异常!"),
    DATA_EXISTS_ERROR(500025, "数据已存在!");

    private Integer code;

    private String message;

    BusinessEnums(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

}
